﻿Imports PTIC_Util
Imports PTIC_Util.GestionCalculs


Namespace Comptes

    ''' <summary>
    ''' Représente le compte non technique
    ''' </summary>
    ''' <remarks></remarks>
    Public Class CompteNonTechnique_V2
        Inherits CalculCompose

        Private _parametresEntree As Object

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
            _resultats = New ResultatsCRNonTechnique
        End Sub

        ''' <summary>
        ''' Données initiales utilisées pour faire les calculs
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ParametresEntree() As Parametres
            Get
                Return _parametresEntree
            End Get
            Set(ByVal value As Parametres)
                _parametresEntree = value
            End Set
        End Property

        ''' <summary>
        ''' Résultats des calculs
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Overloads ReadOnly Property Resultats() As ResultatsCRNonTechnique
            Get
                Return _resultats
            End Get
        End Property

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Protected Overrides Sub procedureCalcul()
            Dim resultatsCalcul As New ResultatsCRNonTechnique
            With _parametresEntree

                ReDim resultatsCalcul.ResultatVie(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.ResultatNonVie(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.ProduitPlacementsAlloues(.nbAnneesProjetees - 1)

                ReDim resultatsCalcul.ProduitPlacements(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.ProduitPlacementsTransferes(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.ChargePlacements(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.ImpotsEtTaxes(.nbAnneesProjetees - 1)
                ReDim resultatsCalcul.Resultat(.nbAnneesProjetees - 1)

                For i = 1 To .nbAnneesProjetees

                    resultatsCalcul.ResultatVie(i - 1) = .resultatVie(i - 1)
                    resultatsCalcul.ResultatNonVie(i - 1) = .resultatNonVie(i - 1)
                    resultatsCalcul.ProduitPlacementsAlloues(i - 1) = .produitPlacementsAlloues(i - 1)
                    'Produit des placements
                    resultatsCalcul.ProduitPlacements(i - 1) = (((.provClotureIT(i - 1) + _
                                                             .provOuvertureIT(i - 1)) / 2) + _
                                                             .capitauxAllouesNonVie(i - 1)) * _parametresEntree.txRendActifsAnn
                    'Produit des placements transférés
                    resultatsCalcul.ProduitPlacementsTransferes(i - 1) = ((.provClotureIT(i - 1) + .provOuvertureIT(i - 1)) / 2) * _parametresEntree.txTechAnn
                    'Charge des placements
                    resultatsCalcul.ChargePlacements(i - 1) = .capitauxAllouesNonVie(i - 1) * .txCouvertureTSDI * (.txRendActifsAnn + .coutAdditionnelTSDI)
                    'Impôts sur les bénéfices
                    resultatsCalcul.ImpotsEtTaxes(i - 1) = Math.Max((.resultatNonVie(i - 1) _
                                                                + .resultatVie(i - 1) _
                                                                + .produitPlacementsAlloues(i - 1)) * .TxImpositionIS, 0)
                    'Résultat
                    resultatsCalcul.Resultat(i - 1) = .resultatVie(i - 1) _
                                                 + .resultatNonVie(i - 1) _
                                                 + .produitPlacementsAlloues(i - 1) _
                                                 + resultatsCalcul.ProduitPlacements(i - 1) _
                                                 - resultatsCalcul.ProduitPlacementsTransferes(i - 1) _
                                                 - resultatsCalcul.ChargePlacements(i - 1) _
                                                 - resultatsCalcul.ImpotsEtTaxes(i - 1)

                Next
            End With
            _resultats = resultatsCalcul
        End Sub

        ''' <summary>
        ''' Parametre utilisé pour évaluer les comptes non techniques
        ''' </summary>
        ''' <remarks></remarks>
        Public Class Parametres

            ''' <summary>
            ''' Représente le nombre d'années de projection
            ''' </summary>
            ''' <remarks></remarks>
            Public Property NbAnneesProjetees As Integer

            ''' <summary>
            ''' Représente le résultat VIE
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatVie As Double()

            ''' <summary>
            ''' Représente le résultat NON-VIE
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatNonVie As Double()

            ''' <summary>
            ''' Représente les produits alloués des placements
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProduitPlacementsAlloues As Double()

            ''' <summary>
            ''' Représente les capitaux alloués NON-VIE
            ''' </summary>
            ''' <remarks></remarks>
            Public Property CapitauxAllouesNonVie As Double()

            ''' <summary>
            ''' Représente le montant provisionné à la cloture d'un sinistre incapacité au travail
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProvClotureIT As Double()

            ''' <summary>
            ''' Représente le montant provisionné à l'ouverture d'un sinistre incapacité au travail 
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProvOuvertureIT As Double()

            ''' <summary>
            ''' Représente le taux annuel du rendement des actifs
            ''' </summary>
            ''' <remarks></remarks>
            Public Property TxRendActifsAnn As Double

            ''' <summary>
            ''' Représente le taux technique annuel
            ''' </summary>
            ''' <remarks></remarks>
            Public Property TxTechAnn As Double

            ''' <summary>
            ''' Taux de couverture des emprunts subordonnés à durée indéterminés
            ''' </summary>
            ''' <remarks></remarks>
            Public Property TxCouvertureTSDI As Double

            ''' <summary>
            ''' Cout additionel des emprunts subordonnés à durée indéterminés
            ''' </summary>
            ''' <remarks></remarks>
            Public Property CoutAdditionnelTSDI As Double

            ''' <summary>
            ''' Représente le taux d'imposition de l'IS
            ''' </summary>
            ''' <remarks></remarks>
            Public Property TxImpositionIS As Double
        End Class

        ''' <summary>
        ''' Résultat de l' évaluation des comptes non techniques
        ''' </summary>
        ''' <remarks></remarks>
        Public Class ResultatsCRNonTechnique
            'Création des tableaux attendus en sortie du compte

            ''' <summary>
            ''' Représente le Résultat VIE
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatVie As Double()

            ''' <summary>
            ''' Représente le Résultat NON-VIE
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ResultatNonVie As Double()

            ''' <summary>
            ''' Représente le produit des placements qui sont alloués
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProduitPlacementsAlloues As Double()

            ''' <summary>
            ''' Représente le produit des placements
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProduitPlacements As Double()

            ''' <summary>
            ''' Représente le produit des placements transférés
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ProduitPlacementsTransferes As Double()

            ''' <summary>
            ''' Représente les charges générées par les placements
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ChargePlacements As Double()

            ''' <summary>
            ''' Représente les impots et Taxes
            ''' </summary>
            ''' <remarks></remarks>
            Public Property ImpotsEtTaxes As Double()

            ''' <summary>
            ''' Représente le total du Résultat
            ''' </summary>
            ''' <remarks></remarks>
            Public Property Resultat As Double()

            ''' <summary>
            ''' Fait une copie des données
            ''' </summary>
            ''' <returns></returns>
            ''' <remarks></remarks>
            Public Function Copy() As ResultatsCRNonTechnique
                Dim result As New ResultatsCRNonTechnique
                Dim resultatVie_copy(ResultatVie.Count - 1) As Double
                Dim resultatNonVie_copy(ResultatNonVie.Count - 1) As Double
                Dim produitPlacementsAlloues_copy(ProduitPlacementsAlloues.Count - 1) As Double
                Dim produitPlacements_copy(ProduitPlacements.Count - 1) As Double
                Dim produitPlacementsTransferes_copy(ProduitPlacementsTransferes.Count - 1) As Double
                Dim chargePlacements_copy(ChargePlacements.Count - 1) As Double
                Dim impotsEtTaxes_copy(ImpotsEtTaxes.Count - 1) As Double
                Dim resultat_copy(Resultat.Count - 1) As Double
                For i = 0 To ResultatVie.Count - 1
                    resultatVie_copy(i) = ResultatVie(i)
                    resultatNonVie_copy(i) = ResultatNonVie(i)
                    produitPlacementsAlloues_copy(i) = ProduitPlacementsAlloues(i)
                    produitPlacements_copy(i) = ProduitPlacements(i)
                    produitPlacementsTransferes_copy(i) = ProduitPlacementsTransferes(i)
                    chargePlacements_copy(i) = ChargePlacements(i)
                    impotsEtTaxes_copy(i) = ImpotsEtTaxes(i)
                    resultat_copy(i) = Resultat(i)
                Next
                result.ResultatVie = resultatVie_copy
                result.ResultatNonVie = resultatNonVie_copy
                result.ProduitPlacementsAlloues = produitPlacementsAlloues_copy
                result.ProduitPlacements = produitPlacements_copy
                result.ProduitPlacementsTransferes = produitPlacementsTransferes_copy
                result.ChargePlacements = chargePlacements_copy
                result.ImpotsEtTaxes = impotsEtTaxes_copy
                result.Resultat = resultat_copy
                Return result
            End Function
        End Class

    End Class


End Namespace